今天我們要來了解OAuth是甚麼東西?
根據wiki的解釋
開放授權(OAuth)是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如相片,影片,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。
OAuth允許使用者提供一個權杖,而不是使用者名稱和密碼來訪問他們存放在特定服務提供者的資料。每一個權杖授權一個特定的網站(例如,影片編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相簿中的影片)。這樣,OAuth讓使用者可以授權第三方網站訪問他們儲存在另外服務提供者的某些特定資訊,而非所有內容。
https://zh.wikipedia.org/zh-tw/%E5%BC%80%E6%94%BE%E6%8E%88%E6%9D%83
圖片取自:https://www.technice.com.tw/experience/12520/
假設我們要下載一個雲端上面的檔案,進到app後,它會將我們導到Authorization Server,身分認證成功後,經過Resource Owner同意後,就會將使用者轉導回去原本的app,並且帶上Authorization Grant,接著app就可以使用Authorization Grant向Autheriztion Server換取Access token,最後app就可以用access token來跟resource server溝通啦,我們要的檔案就可以下載下來了。
這樣的流程可以發現,app並沒有做身分認證,而是交給第三方來認證,授權的部分在做在我們的app就好,就可以讓授權和身分認證在不同的地方,減少了憑證暴露的風險,例如輸入到這個app的帳密會被駭客偷走,那麼透過第三方認證,就可以防止app獲得用戶的敏感憑證。
並且我們可以透過限制token的ttl,來讓我們使用上更加的安全,也可以refresh token來管理有效期,不需要讓user重新提供憑證。0
圖片取自:https://www.technice.com.tw/experience/12520/
Implicit Grant適合Client-side applications的類型,通常會是整個應用程式都在前端運行,依需求向後端 API 取得資料。例如單純的靜態網站或 Single Page Application(SPA) 都適用。這些應用不會安全存儲客戶端密鑰,相對比較不安全。
它跟Authorization Code Grant相比少了一步驟,它會從Authorization Server得到access token,客戶端無需額外的請求來交換access token。這樣做的好處是加快了token的取得,但相對的這個token被帶在Authorization Server返回的url當中,這樣可能會有暴露的風險。
今天我們學會了兩種OAuth2.0的用法,明天要繼續來驗證之路XD
https://zh.wikipedia.org/zh-tw/%E5%BC%80%E6%94%BE%E6%8E%88%E6%9D%83
https://www.technice.com.tw/experience/12520/